Police

Introduction

For this project, we will be using three different data sets. The csvs that we will be using are “OIS_Dataset_Incidents.csv”, “OIS_Dataset_Officers”, and “OIS_Dataset_Subjects.csv”. These datasets involve cases with incidents, police officers, and subjects within Austin, TX. We also joined the datasets with the Census Data called “Austin_Race”, where we will be comparing the races with the OIS_Dataset. The first dataset is “OIS_Dataset_Incidents.csv”. Mainly describes when, where, and how the incident occured. The second dataset is “OIS_Dataset_Officers”. Here describes who the officers were during those incidents, which includes their age, gender, etc. The third dataset is “OIS_Dataset_Subjects.csv”. This describes the subjects who were involved in the incidents, including their race/ethnicity, age, etc.

To download the data needed for this project:

  1. Click or copy/paste this link to your web browser https://data.world/ryanmak/s-17-dv-final-project
  2. Download the files “OIS_Dataset_Incidents.csv”, “OIS_Dataset_Officers”, and “OIS_Dataset_Subjects.csv”.

R Configuration

Below is our sessionInfo().

sessionInfo(package=NULL)

ETL

Here we have the ETL code to clean our datasets. These datasets have already been cleaned.

source("../01 Data/ETL.OIS_Dataset_Incidents.R")
source("../01 Data/ETL.OIS_Dataset_Officers.R")
source("../01 Data/ETL.OIS_Dataset_Subjects.R")

Shiny Visualizations

This is the link to the Shiny Apps that was published for our project: https://jenniferchung.shinyapps.io/finalproject/

require(ggplot2)
require(dplyr)
require(shiny)
require(shinydashboard)
require(data.world)
require(readr)
require(DT)
require(leaflet)
require(plotly)
data.world(propsfile = "www/.data.world")
source("../02 Shiny/server.R")
source("../02 Shiny/ui.R")

Type of Case Call Versus Subject Age per Day of Week

Shiny Boxplot

This is a box plot that displays the ages of subjects in officer involved shootings. This is separated by the crime that the police were alerted for initially. The color shows the date in which the shootings happened. THE MOST COMMON CALL THAT LEADS TO SHOOTINGS IS DISTURBANCES. ADITIONALLY, CERTAIN CRIMES ARE MORE COMMON ON THE WEEKENDS SUCH AS BURGLARY.

Number of Shots Fired by Police Force per Race

Shiny Histogram

This histogram displays the count of bullets shot by police officers and the frequency/count as well. This histogram shows that most shootings involve low number of bullets. Aditionally, this histogram shows the race of the subjects involved in the shootings which allows us to discern valuable information about race relations and police. FROM A RACIAL PERSPECTIVE, ASIANS ARE THE LEAST LIKELY TO BE INVOLVED IN SHOOTINGS, FOLLOWED BY HISPANICS, BLACKS, THEN WHITES. THIS DOES NOT ACCOUNT FOR POPULATION SIZES.

Number of Shots Fired per Year

Shiny Scatterplot

This scatterplot shows the gradual trend with the increase of shots fired in the Austin area over time. Although this is not a strong correlation, the trend indicates a worrying trend with increases in shooting frequency as well as injuries from shootings.

Accuracy of Police Officer Shots based of Subject Weapon and Location

Shiny Crosstab

This crosstab shows the accuracy of police officers in the different scenarios with the weapon of the subject and the location of the shooting. The kpi indicates the hit rate of the officers over the total number of bullets shot. OFFICERS TEND TO BE LESS ACCURATE IN AREAS THAT WOULD INVOLVE INNOCENT BYSTANDERS SUCH AS PARKING LOTS. THEY ARE MUCH MORE ACCURATE IF THEY ARE IN A RESIDENCE OR BACKYARD. THEY ARE ALSO MORE ACCURATE IF THE SUBJECT IS EQUIPPED WITH A RIFLE, POSSIBLY INDICATING THE USE OF SPECIAL FORCES OR ADVANCED POLICE TEAMS.

Amount of Police Officer Shots and Subject Casualty based of Subject Drug Influence

Shiny Barchart

This barchart indicates the effects of drugs and alcohol on officer involved shootings. Officers shot more often at people under the influence and were more likely to seriously harm or kill these people. WHILE IT APPEARS THAT PEOPLE NOT UNDER THE INFLUENCE ARE SHOT AT MORE, THE COMBINATION OF THE DRUG AND ALCOHOL COLUMNS INDICATE THAT THOSE UNDER THE INFLUENCE ARE IN MUCH GREATER DANGER. IT IS MUCH MORE COMMON FOR THOSE NOT UNDER THE INFLUENCE TO ESCAPE WITH NO INJURY OR MINIMAL INJURIES.

Tableau Visualizations

Type of Case Call Versus Subject Age per Day of Week

Tableau Box Plot

This is a box plot that displays the ages of subjects in officer involved shootings. This is separated by the crime that the police were alerted for initially. THe color shows the date in which the shootings happened. THE MOST COMMON CALL THAT LEADS TO SHOOTINGS IS DISTURBANCES. ADITIONALLY, CERTAIN CRIMES ARE MORE COMMON ON THE WEEKENDS SUCH AS BURGLARY. Similar to the box plot from the Shiny image.

Number of Shots Fired by Police Force per Race

Tableau Histogram

This histogram displays the count of bullets shot by police officers and the frequency/count as well. This histogram shows that most shootings involve low number of bullets. Aditionally, this histogram shows the race of the subjects involved in the shootings which allows us to discern valuable information about race relations and police. FROM A RACIAL PERSPECTIVE, ASIANS ARE THE LEAST LIKELY TO BE INVOLVED IN SHOOTINGS, FOLLOWED BY HISPANICS, BLACKS, THEN WHITES. THIS DOES NOT ACCOUNT FOR POPULATION SIZES. Similar to the histogram from the Shiny image.

Number of Shots Fired per Year

Tableau Scatterplot

This scatterplot shows the gradual trend with the increase of shots fired in the Austin area over time. Although this is not a strong correlation, the trend indicates a worrying trend with increases in shooting frequency as well as injuries from shootings. Similar to the scatterplot from the Shiny image.

Accuracy of Police Officer Shots based of Subject Weapon and Location

Tableau Crosstab

This crosstab shows the accuracy of police officers in the different scenarios with the weapon of the subject and the location of the shooting. The kpi indicates the hit rate of the officers over the total number of bullets shot. OFFICERS TEND TO BE LESS ACCURATE IN AREAS THAT WOULD INVOLVE INNOCENT BYSTANDERS SUCH AS PARKING LOTS. THEY ARE MUCH MORE ACCURATE IF THEY ARE IN A RESIDENCE OR BACKYARD. THEY ARE ALSO MORE ACCURATE IF THE SUBJECT IS EQUIPPED WITH A RIFLE, POSSIBLY INDICATING THE USE OF SPECIAL FORCES OR ADVANCED POLICE TEAMS. Similar to the crosstab from the Shiny image.

Amount of Police Officer Shots and Subject Casualty based of Subject Drug Influence

Tableau Barchart

This barchart indicates the effects of drugs and alcohol on officer involved shootings. Officers shot more often at people under the influence and were more likely to seriously harm or kill these people. WHILE IT APPEARS THAT PEOPLE NOT UNDER THE INFLUENCE ARE SHOT AT MORE, THE COMBINATION OF THE DRUG AND ALCOHOL COLUMNS INDICATE THAT THOSE UNDER THE INFLUENCE ARE IN MUCH GREATER DANGER. IT IS MUCH MORE COMMON FOR THOSE NOT UNDER THE INFLUENCE TO ESCAPE WITH NO INJURY OR MINIMAL INJURIES. Similar to the barchart from the Shiny image.

LS0tDQp0aXRsZTogIlBvbGljZSBPZmZpY2VyIFNob290aW5nIENhc2VzIGluIEF1c3RpbiINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICBodG1sX25vdGVib29rOg0KICAgIHRvYzogeWVzDQphdXRob3JzOiBDaHJpc3RpYW4gQXRheWRlLCBKZW5uaWZlciBDaHVuZywgUnlhbiBNYWssIFZpdmlhbiBXYW5nDQotLS0NCg0KPGNlbnRlcj4hW1BvbGljZV0ocG9saWNlLmpwZyk8L2NlbnRlcj4NCg0KIyoqSW50cm9kdWN0aW9uKioNCkZvciB0aGlzIHByb2plY3QsIHdlIHdpbGwgYmUgdXNpbmcgdGhyZWUgZGlmZmVyZW50IGRhdGEgc2V0cy4gVGhlIGNzdnMgdGhhdCB3ZSB3aWxsIGJlIHVzaW5nIGFyZSAiT0lTX0RhdGFzZXRfSW5jaWRlbnRzLmNzdiIsICJPSVNfRGF0YXNldF9PZmZpY2VycyIsIGFuZCAiT0lTX0RhdGFzZXRfU3ViamVjdHMuY3N2Ii4gVGhlc2UgZGF0YXNldHMgaW52b2x2ZSBjYXNlcyB3aXRoIGluY2lkZW50cywgcG9saWNlIG9mZmljZXJzLCBhbmQgc3ViamVjdHMgd2l0aGluIEF1c3RpbiwgVFguIFdlIGFsc28gam9pbmVkIHRoZSBkYXRhc2V0cyB3aXRoIHRoZSBDZW5zdXMgRGF0YSBjYWxsZWQgIkF1c3Rpbl9SYWNlIiwgd2hlcmUgd2Ugd2lsbCBiZSBjb21wYXJpbmcgdGhlIHJhY2VzIHdpdGggdGhlIE9JU19EYXRhc2V0LiANClRoZSBmaXJzdCBkYXRhc2V0IGlzICJPSVNfRGF0YXNldF9JbmNpZGVudHMuY3N2Ii4gTWFpbmx5IGRlc2NyaWJlcyB3aGVuLCB3aGVyZSwgYW5kIGhvdyB0aGUgaW5jaWRlbnQgb2NjdXJlZC4gDQpUaGUgc2Vjb25kIGRhdGFzZXQgaXMgIk9JU19EYXRhc2V0X09mZmljZXJzIi4gSGVyZSBkZXNjcmliZXMgd2hvIHRoZSBvZmZpY2VycyB3ZXJlIGR1cmluZyB0aG9zZSBpbmNpZGVudHMsIHdoaWNoIGluY2x1ZGVzIHRoZWlyIGFnZSwgZ2VuZGVyLCBldGMuDQpUaGUgdGhpcmQgZGF0YXNldCBpcyAiT0lTX0RhdGFzZXRfU3ViamVjdHMuY3N2Ii4gVGhpcyBkZXNjcmliZXMgdGhlIHN1YmplY3RzIHdobyB3ZXJlIGludm9sdmVkIGluIHRoZSBpbmNpZGVudHMsIGluY2x1ZGluZyB0aGVpciByYWNlL2V0aG5pY2l0eSwgYWdlLCBldGMuDQoNCjxiPlRvIGRvd25sb2FkIHRoZSBkYXRhIG5lZWRlZCBmb3IgdGhpcyBwcm9qZWN0OjwvYj4NCg0KMS4gQ2xpY2sgb3IgY29weS9wYXN0ZSB0aGlzIGxpbmsgdG8geW91ciB3ZWIgYnJvd3NlciBodHRwczovL2RhdGEud29ybGQvcnlhbm1hay9zLTE3LWR2LWZpbmFsLXByb2plY3QNCjIuIERvd25sb2FkIHRoZSBmaWxlcyAiT0lTX0RhdGFzZXRfSW5jaWRlbnRzLmNzdiIsICJPSVNfRGF0YXNldF9PZmZpY2VycyIsIGFuZCAgIk9JU19EYXRhc2V0X1N1YmplY3RzLmNzdiIuDQoNCg0KIyoqUiBDb25maWd1cmF0aW9uKioNCkJlbG93IGlzIG91ciBzZXNzaW9uSW5mbygpLiANCg0KYGBge3J9DQpzZXNzaW9uSW5mbyhwYWNrYWdlPU5VTEwpDQpgYGANCg0KIyoqRVRMKioNCg0KSGVyZSB3ZSBoYXZlIHRoZSBFVEwgY29kZSB0byBjbGVhbiBvdXIgZGF0YXNldHMuIFRoZXNlIGRhdGFzZXRzIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQuDQoNCmBgYHtyfQ0Kc291cmNlKCIuLi8wMSBEYXRhL0VUTC5PSVNfRGF0YXNldF9JbmNpZGVudHMuUiIpDQpzb3VyY2UoIi4uLzAxIERhdGEvRVRMLk9JU19EYXRhc2V0X09mZmljZXJzLlIiKQ0Kc291cmNlKCIuLi8wMSBEYXRhL0VUTC5PSVNfRGF0YXNldF9TdWJqZWN0cy5SIikNCmBgYA0KDQojKipTaGlueSBWaXN1YWxpemF0aW9ucyoqDQoNCjxiPlRoaXMgaXMgdGhlIGxpbmsgdG8gdGhlIFNoaW55IEFwcHMgdGhhdCB3YXMgcHVibGlzaGVkIGZvciBvdXIgcHJvamVjdDo8L2I+DQpodHRwczovL2plbm5pZmVyY2h1bmcuc2hpbnlhcHBzLmlvL2ZpbmFscHJvamVjdC8NCg0KYGBge3J9DQpyZXF1aXJlKGdncGxvdDIpDQpyZXF1aXJlKGRwbHlyKQ0KcmVxdWlyZShzaGlueSkNCnJlcXVpcmUoc2hpbnlkYXNoYm9hcmQpDQpyZXF1aXJlKGRhdGEud29ybGQpDQpyZXF1aXJlKHJlYWRyKQ0KcmVxdWlyZShEVCkNCnJlcXVpcmUobGVhZmxldCkNCnJlcXVpcmUocGxvdGx5KQ0KZGF0YS53b3JsZChwcm9wc2ZpbGUgPSAid3d3Ly5kYXRhLndvcmxkIikNCnNvdXJjZSgiLi4vMDIgU2hpbnkvc2VydmVyLlIiKQ0Kc291cmNlKCIuLi8wMiBTaGlueS91aS5SIikNCmBgYA0KDQojIypUeXBlIG9mIENhc2UgQ2FsbCBWZXJzdXMgU3ViamVjdCBBZ2UgcGVyIERheSBvZiBXZWVrKg0KDQo8Y2VudGVyPiFbU2hpbnkgQm94cGxvdF0oLi4vMDIgU2hpbnkvQm94cGxvdC5wbmcpPC9jZW50ZXI+DQoNClRoaXMgaXMgYSBib3ggcGxvdCB0aGF0IGRpc3BsYXlzIHRoZSBhZ2VzIG9mIHN1YmplY3RzIGluIG9mZmljZXIgaW52b2x2ZWQgc2hvb3RpbmdzLiBUaGlzIGlzIHNlcGFyYXRlZCBieSB0aGUgY3JpbWUgdGhhdCB0aGUgcG9saWNlIHdlcmUgYWxlcnRlZCBmb3IgaW5pdGlhbGx5LiBUaGUgY29sb3Igc2hvd3MgdGhlIGRhdGUgaW4gd2hpY2ggdGhlIHNob290aW5ncyBoYXBwZW5lZC4gPGI+VEhFIE1PU1QgQ09NTU9OIENBTEwgVEhBVCBMRUFEUyBUTyBTSE9PVElOR1MgSVMgRElTVFVSQkFOQ0VTLiBBRElUSU9OQUxMWSwgQ0VSVEFJTiBDUklNRVMgQVJFIE1PUkUgQ09NTU9OIE9OIFRIRSBXRUVLRU5EUyBTVUNIIEFTIEJVUkdMQVJZLjwvYj4NCg0KIyMqTnVtYmVyIG9mIFNob3RzIEZpcmVkIGJ5IFBvbGljZSBGb3JjZSBwZXIgUmFjZSoNCg0KPGNlbnRlcj4hW1NoaW55IEhpc3RvZ3JhbV0oLi4vMDIgU2hpbnkvSGlzdG9ncmFtLnBuZyk8L2NlbnRlcj4NCg0KVGhpcyBoaXN0b2dyYW0gZGlzcGxheXMgdGhlIGNvdW50IG9mIGJ1bGxldHMgc2hvdCBieSBwb2xpY2Ugb2ZmaWNlcnMgYW5kIHRoZSBmcmVxdWVuY3kvY291bnQgYXMgd2VsbC4gVGhpcyBoaXN0b2dyYW0gc2hvd3MgdGhhdCBtb3N0IHNob290aW5ncyBpbnZvbHZlIGxvdyBudW1iZXIgb2YgYnVsbGV0cy4gQWRpdGlvbmFsbHksIHRoaXMgaGlzdG9ncmFtIHNob3dzIHRoZSByYWNlIG9mIHRoZSBzdWJqZWN0cyBpbnZvbHZlZCBpbiB0aGUgc2hvb3RpbmdzIHdoaWNoIGFsbG93cyB1cyB0byBkaXNjZXJuIHZhbHVhYmxlIGluZm9ybWF0aW9uIGFib3V0IHJhY2UgcmVsYXRpb25zIGFuZCBwb2xpY2UuIDxiPkZST00gQSBSQUNJQUwgUEVSU1BFQ1RJVkUsIEFTSUFOUyBBUkUgVEhFIExFQVNUIExJS0VMWSBUTyBCRSBJTlZPTFZFRCBJTiBTSE9PVElOR1MsIEZPTExPV0VEIEJZIEhJU1BBTklDUywgQkxBQ0tTLCBUSEVOIFdISVRFUy4gVEhJUyBET0VTIE5PVCBBQ0NPVU5UIEZPUiBQT1BVTEFUSU9OIFNJWkVTLjwvYj4NCg0KIyMqTnVtYmVyIG9mIFNob3RzIEZpcmVkIHBlciBZZWFyKg0KDQo8Y2VudGVyPiFbU2hpbnkgU2NhdHRlcnBsb3RdKC4uLzAyIFNoaW55L1NjYXR0ZXJwbG90LnBuZyk8L2NlbnRlcj4NCg0KVGhpcyBzY2F0dGVycGxvdCBzaG93cyB0aGUgZ3JhZHVhbCB0cmVuZCB3aXRoIHRoZSBpbmNyZWFzZSBvZiBzaG90cyBmaXJlZCBpbiB0aGUgQXVzdGluIGFyZWEgb3ZlciB0aW1lLiBBbHRob3VnaCB0aGlzIGlzIG5vdCBhIHN0cm9uZyBjb3JyZWxhdGlvbiwgdGhlIHRyZW5kIGluZGljYXRlcyBhIHdvcnJ5aW5nIHRyZW5kIHdpdGggaW5jcmVhc2VzIGluIHNob290aW5nIGZyZXF1ZW5jeSBhcyB3ZWxsIGFzIGluanVyaWVzIGZyb20gc2hvb3RpbmdzLg0KDQojIypBY2N1cmFjeSBvZiBQb2xpY2UgT2ZmaWNlciBTaG90cyBiYXNlZCBvZiBTdWJqZWN0IFdlYXBvbiBhbmQgTG9jYXRpb24qDQoNCjxjZW50ZXI+IVtTaGlueSBDcm9zc3RhYl0oLi4vMDIgU2hpbnkvQ3Jvc3N0YWIucG5nKTwvY2VudGVyPg0KDQpUaGlzIGNyb3NzdGFiIHNob3dzIHRoZSBhY2N1cmFjeSBvZiBwb2xpY2Ugb2ZmaWNlcnMgaW4gdGhlIGRpZmZlcmVudCBzY2VuYXJpb3Mgd2l0aCB0aGUgd2VhcG9uIG9mIHRoZSBzdWJqZWN0IGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIHNob290aW5nLiBUaGUga3BpIGluZGljYXRlcyB0aGUgaGl0IHJhdGUgb2YgdGhlIG9mZmljZXJzIG92ZXIgdGhlIHRvdGFsIG51bWJlciBvZiBidWxsZXRzIHNob3QuIDxiPk9GRklDRVJTIFRFTkQgVE8gQkUgTEVTUyBBQ0NVUkFURSBJTiBBUkVBUyBUSEFUIFdPVUxEIElOVk9MVkUgSU5OT0NFTlQgQllTVEFOREVSUyBTVUNIIEFTIFBBUktJTkcgTE9UUy4gVEhFWSBBUkUgTVVDSCBNT1JFIEFDQ1VSQVRFIElGIFRIRVkgQVJFIElOIEEgUkVTSURFTkNFIE9SIEJBQ0tZQVJELiBUSEVZIEFSRSBBTFNPIE1PUkUgQUNDVVJBVEUgSUYgVEhFIFNVQkpFQ1QgSVMgRVFVSVBQRUQgV0lUSCBBIFJJRkxFLCBQT1NTSUJMWSBJTkRJQ0FUSU5HIFRIRSBVU0UgT0YgU1BFQ0lBTCBGT1JDRVMgT1IgQURWQU5DRUQgUE9MSUNFIFRFQU1TLjwvYj4NCg0KIyMqQW1vdW50IG9mIFBvbGljZSBPZmZpY2VyIFNob3RzIGFuZCBTdWJqZWN0IENhc3VhbHR5IGJhc2VkIG9mIFN1YmplY3QgRHJ1ZyBJbmZsdWVuY2UqDQoNCjxjZW50ZXI+IVtTaGlueSBCYXJjaGFydF0oLi4vMDIgU2hpbnkvQmFyY2hhcnQucG5nKTwvY2VudGVyPg0KDQpUaGlzIGJhcmNoYXJ0IGluZGljYXRlcyB0aGUgZWZmZWN0cyBvZiBkcnVncyBhbmQgYWxjb2hvbCBvbiBvZmZpY2VyIGludm9sdmVkIHNob290aW5ncy4gT2ZmaWNlcnMgc2hvdCBtb3JlIG9mdGVuIGF0IHBlb3BsZSB1bmRlciB0aGUgaW5mbHVlbmNlIGFuZCB3ZXJlIG1vcmUgbGlrZWx5IHRvIHNlcmlvdXNseSBoYXJtIG9yIGtpbGwgdGhlc2UgcGVvcGxlLiA8Yj5XSElMRSBJVCBBUFBFQVJTIFRIQVQgUEVPUExFIE5PVCBVTkRFUiBUSEUgSU5GTFVFTkNFIEFSRSBTSE9UIEFUIE1PUkUsIFRIRSBDT01CSU5BVElPTiBPRiBUSEUgRFJVRyBBTkQgQUxDT0hPTCBDT0xVTU5TIElORElDQVRFIFRIQVQgVEhPU0UgVU5ERVIgVEhFIElORkxVRU5DRSBBUkUgSU4gTVVDSCBHUkVBVEVSIERBTkdFUi4gSVQgSVMgTVVDSCBNT1JFIENPTU1PTiBGT1IgVEhPU0UgTk9UIFVOREVSIFRIRSBJTkZMVUVOQ0UgVE8gRVNDQVBFIFdJVEggTk8gSU5KVVJZIE9SIE1JTklNQUwgSU5KVVJJRVMuPC9iPg0KDQoNCiMqKlRhYmxlYXUgVmlzdWFsaXphdGlvbnMqKg0KDQojIypUeXBlIG9mIENhc2UgQ2FsbCBWZXJzdXMgU3ViamVjdCBBZ2UgcGVyIERheSBvZiBXZWVrKg0KDQo8Y2VudGVyPiFbVGFibGVhdSBCb3ggUGxvdF0oLi4vMDMgVmlzdWFsaXphdGlvbi9Cb3ggUGxvdC5wbmcpPC9jZW50ZXI+DQoNClRoaXMgaXMgYSBib3ggcGxvdCB0aGF0IGRpc3BsYXlzIHRoZSBhZ2VzIG9mIHN1YmplY3RzIGluIG9mZmljZXIgaW52b2x2ZWQgc2hvb3RpbmdzLiBUaGlzIGlzIHNlcGFyYXRlZCBieSB0aGUgY3JpbWUgdGhhdCB0aGUgcG9saWNlIHdlcmUgYWxlcnRlZCBmb3IgaW5pdGlhbGx5LiBUSGUgY29sb3Igc2hvd3MgdGhlIGRhdGUgaW4gd2hpY2ggdGhlIHNob290aW5ncyBoYXBwZW5lZC4gPGI+VEhFIE1PU1QgQ09NTU9OIENBTEwgVEhBVCBMRUFEUyBUTyBTSE9PVElOR1MgSVMgRElTVFVSQkFOQ0VTLiBBRElUSU9OQUxMWSwgQ0VSVEFJTiBDUklNRVMgQVJFIE1PUkUgQ09NTU9OIE9OIFRIRSBXRUVLRU5EUyBTVUNIIEFTIEJVUkdMQVJZLjwvYj4gU2ltaWxhciB0byB0aGUgYm94IHBsb3QgZnJvbSB0aGUgU2hpbnkgaW1hZ2UuDQoNCiMjKk51bWJlciBvZiBTaG90cyBGaXJlZCBieSBQb2xpY2UgRm9yY2UgcGVyIFJhY2UqDQoNCjxjZW50ZXI+IVtUYWJsZWF1IEhpc3RvZ3JhbV0oLi4vMDMgVmlzdWFsaXphdGlvbi9IaXN0b2dyYW0ucG5nKTwvY2VudGVyPg0KDQpUaGlzIGhpc3RvZ3JhbSBkaXNwbGF5cyB0aGUgY291bnQgb2YgYnVsbGV0cyBzaG90IGJ5IHBvbGljZSBvZmZpY2VycyBhbmQgdGhlIGZyZXF1ZW5jeS9jb3VudCBhcyB3ZWxsLiBUaGlzIGhpc3RvZ3JhbSBzaG93cyB0aGF0IG1vc3Qgc2hvb3RpbmdzIGludm9sdmUgbG93IG51bWJlciBvZiBidWxsZXRzLiBBZGl0aW9uYWxseSwgdGhpcyBoaXN0b2dyYW0gc2hvd3MgdGhlIHJhY2Ugb2YgdGhlIHN1YmplY3RzIGludm9sdmVkIGluIHRoZSBzaG9vdGluZ3Mgd2hpY2ggYWxsb3dzIHVzIHRvIGRpc2Nlcm4gdmFsdWFibGUgaW5mb3JtYXRpb24gYWJvdXQgcmFjZSByZWxhdGlvbnMgYW5kIHBvbGljZS4gPGI+RlJPTSBBIFJBQ0lBTCBQRVJTUEVDVElWRSwgQVNJQU5TIEFSRSBUSEUgTEVBU1QgTElLRUxZIFRPIEJFIElOVk9MVkVEIElOIFNIT09USU5HUywgRk9MTE9XRUQgQlkgSElTUEFOSUNTLCBCTEFDS1MsIFRIRU4gV0hJVEVTLiBUSElTIERPRVMgTk9UIEFDQ09VTlQgRk9SIFBPUFVMQVRJT04gU0laRVMuPC9iPiBTaW1pbGFyIHRvIHRoZSBoaXN0b2dyYW0gZnJvbSB0aGUgU2hpbnkgaW1hZ2UuDQoNCiMjKk51bWJlciBvZiBTaG90cyBGaXJlZCBwZXIgWWVhcioNCg0KPGNlbnRlcj4hW1RhYmxlYXUgU2NhdHRlcnBsb3RdKC4uLzAzIFZpc3VhbGl6YXRpb24vU2NhdHRlciBQbG90LnBuZyk8L2NlbnRlcj4NCg0KVGhpcyBzY2F0dGVycGxvdCBzaG93cyB0aGUgZ3JhZHVhbCB0cmVuZCB3aXRoIHRoZSBpbmNyZWFzZSBvZiBzaG90cyBmaXJlZCBpbiB0aGUgQXVzdGluIGFyZWEgb3ZlciB0aW1lLiBBbHRob3VnaCB0aGlzIGlzIG5vdCBhIHN0cm9uZyBjb3JyZWxhdGlvbiwgdGhlIHRyZW5kIGluZGljYXRlcyBhIHdvcnJ5aW5nIHRyZW5kIHdpdGggaW5jcmVhc2VzIGluIHNob290aW5nIGZyZXF1ZW5jeSBhcyB3ZWxsIGFzIGluanVyaWVzIGZyb20gc2hvb3RpbmdzLiBTaW1pbGFyIHRvIHRoZSBzY2F0dGVycGxvdCBmcm9tIHRoZSBTaGlueSBpbWFnZS4NCg0KIyMqQWNjdXJhY3kgb2YgUG9saWNlIE9mZmljZXIgU2hvdHMgYmFzZWQgb2YgU3ViamVjdCBXZWFwb24gYW5kIExvY2F0aW9uKg0KDQo8Y2VudGVyPiFbVGFibGVhdSBDcm9zc3RhYl0oLi4vMDMgVmlzdWFsaXphdGlvbi9Dcm9zc3RhYi5wbmcpPC9jZW50ZXI+DQoNClRoaXMgY3Jvc3N0YWIgc2hvd3MgdGhlIGFjY3VyYWN5IG9mIHBvbGljZSBvZmZpY2VycyBpbiB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcyB3aXRoIHRoZSB3ZWFwb24gb2YgdGhlIHN1YmplY3QgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgc2hvb3RpbmcuIFRoZSBrcGkgaW5kaWNhdGVzIHRoZSBoaXQgcmF0ZSBvZiB0aGUgb2ZmaWNlcnMgb3ZlciB0aGUgdG90YWwgbnVtYmVyIG9mIGJ1bGxldHMgc2hvdC4gPGI+T0ZGSUNFUlMgVEVORCBUTyBCRSBMRVNTIEFDQ1VSQVRFIElOIEFSRUFTIFRIQVQgV09VTEQgSU5WT0xWRSBJTk5PQ0VOVCBCWVNUQU5ERVJTIFNVQ0ggQVMgUEFSS0lORyBMT1RTLiBUSEVZIEFSRSBNVUNIIE1PUkUgQUNDVVJBVEUgSUYgVEhFWSBBUkUgSU4gQSBSRVNJREVOQ0UgT1IgQkFDS1lBUkQuIFRIRVkgQVJFIEFMU08gTU9SRSBBQ0NVUkFURSBJRiBUSEUgU1VCSkVDVCBJUyBFUVVJUFBFRCBXSVRIIEEgUklGTEUsIFBPU1NJQkxZIElORElDQVRJTkcgVEhFIFVTRSBPRiBTUEVDSUFMIEZPUkNFUyBPUiBBRFZBTkNFRCBQT0xJQ0UgVEVBTVMuPC9iPiBTaW1pbGFyIHRvIHRoZSBjcm9zc3RhYiBmcm9tIHRoZSBTaGlueSBpbWFnZS4NCg0KIyMqQW1vdW50IG9mIFBvbGljZSBPZmZpY2VyIFNob3RzIGFuZCBTdWJqZWN0IENhc3VhbHR5IGJhc2VkIG9mIFN1YmplY3QgRHJ1ZyBJbmZsdWVuY2UqDQoNCjxjZW50ZXI+IVtUYWJsZWF1IEJhcmNoYXJ0XSguLi8wMyBWaXN1YWxpemF0aW9uL0JhcmNoYXJ0LnBuZyk8L2NlbnRlcj4NCg0KVGhpcyBiYXJjaGFydCBpbmRpY2F0ZXMgdGhlIGVmZmVjdHMgb2YgZHJ1Z3MgYW5kIGFsY29ob2wgb24gb2ZmaWNlciBpbnZvbHZlZCBzaG9vdGluZ3MuIE9mZmljZXJzIHNob3QgbW9yZSBvZnRlbiBhdCBwZW9wbGUgdW5kZXIgdGhlIGluZmx1ZW5jZSBhbmQgd2VyZSBtb3JlIGxpa2VseSB0byBzZXJpb3VzbHkgaGFybSBvciBraWxsIHRoZXNlIHBlb3BsZS4gPGI+V0hJTEUgSVQgQVBQRUFSUyBUSEFUIFBFT1BMRSBOT1QgVU5ERVIgVEhFIElORkxVRU5DRSBBUkUgU0hPVCBBVCBNT1JFLCBUSEUgQ09NQklOQVRJT04gT0YgVEhFIERSVUcgQU5EIEFMQ09IT0wgQ09MVU1OUyBJTkRJQ0FURSBUSEFUIFRIT1NFIFVOREVSIFRIRSBJTkZMVUVOQ0UgQVJFIElOIE1VQ0ggR1JFQVRFUiBEQU5HRVIuIElUIElTIE1VQ0ggTU9SRSBDT01NT04gRk9SIFRIT1NFIE5PVCBVTkRFUiBUSEUgSU5GTFVFTkNFIFRPIEVTQ0FQRSBXSVRIIE5PIElOSlVSWSBPUiBNSU5JTUFMIElOSlVSSUVTLjwvYj4gU2ltaWxhciB0byB0aGUgYmFyY2hhcnQgZnJvbSB0aGUgU2hpbnkgaW1hZ2Uu